package com.zhoug.zmuidemo.ui;

import android.graphics.Color;
import android.os.Bundle;
import android.text.InputType;
import android.view.Gravity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.zhoug.common.utils.AppUtils;
import com.zhoug.common.utils.ResourceUtils;
import com.zhoug.zmui.ZMUIAnimations;
import com.zhoug.zmui.dialog.ZMUIBaseDialog;
import com.zhoug.zmui.dialog.ZMUIButtonDialog;
import com.zhoug.zmui.dialog.ZMUIDialog;
import com.zhoug.zmui.dialog.ZMUIInputDialog;
import com.zhoug.zmui.dialog.ZMUILoadingDialog;
import com.zhoug.zmui.dialog.list.ZMUIListDialog;
import com.zhoug.zmui.dialog.list.ZMUIMultiSelectListDialog;
import com.zhoug.zmui.dialog.list.ZMUISelectListDialog;
import com.zhoug.zmuidemo.B;
import com.zhoug.zmuidemo.R;

import java.util.ArrayList;
import java.util.List;

import androidx.appcompat.app.AppCompatActivity;

public class DialogActivity extends AppCompatActivity {
    private static final String TAG = ">>>DialogActivity";
    private CheckBox mCheckboxFullWidth;
    private CheckBox mCheckboxOverlay;
    private EditText mEditCorners;
    private RadioGroup mRadioGroup;

    private int gravity = Gravity.CENTER;
    private EditText mEditTitle;
    private EditText mEditMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
        findViews();
        mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                gravity = checkedId == R.id.radioBtn_center ? Gravity.CENTER : checkedId == R.id.radioBtn_bottom ? Gravity.BOTTOM : Gravity.TOP;
            }
        });
        B b = new B();
        b.printAge();
    }

    public void showButtonDialogDefault(View view) {
        ZMUIButtonDialog buttonDialog = new ZMUIButtonDialog(this);
        buttonDialog.setTitle("提示");
        buttonDialog.setMessage("发送消息?");
        buttonDialog.setPositiveListener("确定", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("确定");
            }
        });
        buttonDialog.setNegativeListener("取消", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("取消");
            }
        });

        buttonDialog.show();
    }

    public void showButtonDialog(View view) {
        ZMUIButtonDialog buttonDialog = new ZMUIButtonDialog(this);
        buttonDialog.setPositiveListener("确定", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("确定");
            }
        });
        setZMUIDialog(buttonDialog);
        buttonDialog.setCanceledOnTouchOutside(true);
        buttonDialog.setNegativeListener("取消", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("取消");
            }
        });

        buttonDialog.show();
    }


    public void showButtonDialog2(View view) {
        ZMUIButtonDialog buttonDialog = new ZMUIButtonDialog(this);
       /* buttonDialog.setPositiveListener("确定", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("确定");
            }
        });*/
        setZMUIDialog(buttonDialog);
        buttonDialog.setCanceledOnTouchOutside(true);
        buttonDialog.setNegativeListener("取消", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("取消");
            }
        });

        buttonDialog.show();
    }

    public void showButtonDialogLong(View view) {
        ZMUIButtonDialog buttonDialog = new ZMUIButtonDialog(this);
        buttonDialog.setTitle("标题");
        buttonDialog.setMessage("这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案这是一个很长的文案");
        buttonDialog.setPositiveListener("确定", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("确定");
            }
        });
        buttonDialog.setOverlay(mCheckboxOverlay.isChecked());
        buttonDialog.setFullWidth(mCheckboxFullWidth.isChecked());
        buttonDialog.setCorners(getCorner());
        buttonDialog.setCanceledOnTouchOutside(true);
        buttonDialog.setNegativeListener("取消", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonDialog.cancel();
                toast("取消");
            }
        });
        buttonDialog.setTitleColor(Color.RED);
        buttonDialog.setMessageColor(Color.parseColor("#555555"));
        buttonDialog.setGravity(Gravity.CENTER);
//        buttonDialog.setMaxHeight(500);
        buttonDialog.setMaxMessageHeight(AppUtils.getScreenSize().y * 2 / 3);
        buttonDialog.show();

    }

    private int getCorner() {
        String s = mEditCorners.getText().toString();
        try {
            return Integer.parseInt(s);
        } catch (Exception e) {
        }
        return 0;
    }

    private void toast(String msg) {
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
    }

    private void findViews() {
        mCheckboxFullWidth = findViewById(R.id.checkbox_fullWidth);
        mCheckboxOverlay = findViewById(R.id.checkbox_overlay);
        mEditCorners = findViewById(R.id.edit_corners);
        mRadioGroup = findViewById(R.id.radioGroup);
        mEditTitle = findViewById(R.id.edit_title);
        mEditMessage = findViewById(R.id.edit_message);
    }


    public void showZMUILoadingDialog(View view) {
        ZMUILoadingDialog dialog = new ZMUILoadingDialog(this);
        dialog.setOverlay(mCheckboxOverlay.isChecked());

        int size = ResourceUtils.dpTopx(200);
//        dialog.setAttributes(size,size,Gravity.CENTER);
        dialog.show();
    }

    private void setZMUIDialog(ZMUIDialog dialog) {
        dialog.setGravity(gravity);
        if (gravity == Gravity.BOTTOM) {
            dialog.setWindowAnimations(ZMUIAnimations.ANIM_DOWN);
        } else if (gravity == Gravity.TOP) {
            dialog.setWindowAnimations(ZMUIAnimations.ANIM_TOP);
        }
        dialog.setOverlay(mCheckboxOverlay.isChecked());
        if (dialog instanceof ZMUIBaseDialog) {
            ZMUIBaseDialog baseDialog = (ZMUIBaseDialog) dialog;
            baseDialog.setFullWidth(mCheckboxFullWidth.isChecked());
            baseDialog.setCorners(getCorner());
            baseDialog.setTitle(mEditTitle.getText().toString());
            baseDialog.setMessage(mEditMessage.getText().toString());

        }
    }


    public void showZMUIListDialog(View view) {
        List<Item> data = new ArrayList<>();
        for (int i = 1; i <= 5; i++) {
            data.add(new Item("Item" + i, i));
        }
        ZMUIListDialog<Item> dialog = new ZMUIListDialog<Item>(this) {
            @Override
            public String getText(Item itemData) {
                return itemData.getName();
            }
        };
        dialog.setOnItemClickListener(pos -> {
            toast(data.get(pos).getName());
        });
        dialog.setData(data);
        setZMUIDialog(dialog);
        dialog.setTitle(null);
        dialog.setMessage(null);
        dialog.show();
    }


    public void showZMUIListDialog2(View view) {
        List<Item> data = new ArrayList<>();
        for (int i = 1; i <= 50; i++) {
            data.add(new Item("Item" + i, i));
        }
        ZMUIListDialog<Item> dialog = new ZMUIListDialog<Item>(this) {
            @Override
            public String getText(Item itemData) {
                return itemData.getName();
            }
        };
        dialog.setOnItemClickListener(pos -> {
            toast(data.get(pos).getName());
        });
        dialog.setData(data);
        dialog.setMaxHeight(1000);
        setZMUIDialog(dialog);
        dialog.setTitle("列表很长限制最大高度");
        dialog.setMessage(null);

        dialog.show();
    }

    private ZMUISelectListDialog<Item> mZMUISelectListDialog;
    private int mSelected = 5;

    public void showZMUISelectListDialog(View view) {
        List<Item> data = new ArrayList<>();
        for (int i = 1; i <= 50; i++) {
            data.add(new Item("单选Item" + i, i));
        }
//        if (mZMUISelectListDialog== null) {

        mZMUISelectListDialog = new ZMUISelectListDialog<Item>(this) {
            @Override
            public String getText(Item itemData) {
                return itemData.getName();
            }
        };
        mZMUISelectListDialog.setSelected(mSelected);
        mZMUISelectListDialog.setData(data);
        mZMUISelectListDialog.setTitle(null);
        mZMUISelectListDialog.setMessage(null);
        mZMUISelectListDialog.setOnSelectedListener(selected -> {
            toast("选择:" + mZMUISelectListDialog.getItemData(selected).getName());
            mSelected = selected;
        });
        mZMUISelectListDialog.setMaxHeight(1000);
//        }
        setZMUIDialog(mZMUISelectListDialog);
        mZMUISelectListDialog.setTitle(null);
        mZMUISelectListDialog.setMessage(null);
        mZMUISelectListDialog.show();
    }

    private ZMUIMultiSelectListDialog<Item> mZMUIMultiSelectListDialog;
    private List<Integer> mMultiSelected = new ArrayList<>();

    public void showZMUIMultiSelectListDialog(View view) {
//        if (mZMUIMultiSelectListDialog == null) {

        List<Item> data = new ArrayList<>();
        for (int i = 1; i <= 50; i++) {
            data.add(new Item("多选Item" + i, i));
        }
        mZMUIMultiSelectListDialog = new ZMUIMultiSelectListDialog<Item>(this) {
            @Override
            public String getText(Item itemData) {
                return itemData.getName();
            }
        };
        mZMUIMultiSelectListDialog.setSelected(mMultiSelected);
        mZMUIMultiSelectListDialog.setData(data);

        mZMUIMultiSelectListDialog.setOnMultiSelectedListener(list -> {
            mMultiSelected.clear();
            if (list.size() > 0) {
                mMultiSelected.addAll(list);
            }
            String result = "选择[";
            if (list.size() > 0) {
                for (int i = 0; i < list.size(); i++) {
                    result += list.get(i) + ",";
                }
            }
            result += "]";
            toast(result);
        });
//            mZMUIMultiSelectListDialog.setMaxHeight(AppUtils.getScreenSize().y  / 2);
//        }
        setZMUIDialog(mZMUIMultiSelectListDialog);
        mZMUIMultiSelectListDialog.setTitle("请选择(多选)");
        mZMUIMultiSelectListDialog.setMessage(null);
        mZMUIMultiSelectListDialog.show();
    }

    public void showZMUIInputDialog(View view) {
        ZMUIInputDialog mZMUIInputDialog = new ZMUIInputDialog(this);
        mZMUIInputDialog.setTitle("请输入用户名");
        mZMUIInputDialog.setNegativeListener("取消", v -> {
            mZMUIInputDialog.dismiss();
        });

        mZMUIInputDialog.setPositiveListener("确定", v -> {
            toast(mZMUIInputDialog.getInputText());
            mZMUIInputDialog.dismiss();
        });
        mZMUIInputDialog.setHintText("姓名");
//        mZMUIInputDialog.setInputText("张三");
//        mZMUIInputDialog.setInputType(InputType.TYPE_CLASS_TEXT);
        mZMUIInputDialog.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
        setZMUIDialog(mZMUIInputDialog);
        mZMUIInputDialog.show();

    }
}